package cn.ycl.netty.bio;


import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.*;

/**
 * @Author YuanChangLiang
 * @Date 2021/1/7 16:12
 */
class testBio {

    /**
     * 通过在cmd中，输入命令telnet 192.168.0.147 6666进行连接
     * 然后快捷键输入ctrl + 】进行输入
     * 命令输入：send hello  ，则这里可以接收到hello
     * @param args null
     * @throws IOException null
     */
    public static void main(String[] args) throws IOException {

        //创建一个线程池
        //如果有客户端连接，就创建一个线程，与之通讯(单独写一个方法)
        ExecutorService executorService = Executors.newCachedThreadPool();
        ServerSocket serverSocket = new ServerSocket(6666);
        System.out.println("服务器启动了");
        //监听，等待客户端连接
        final Socket socket = serverSocket.accept();
        System.out.println("连接到一个客户端");
        //创建一个线程与之通信

//        executorService.execute(new Runnable() {
//            @Override
//            public void run() {
//                handler(socket);
//            }
//        });
        //如果不是java8，不会使用lambda表达式，就使用上面这个
        executorService.execute(() -> handler(socket));
    }

    public static void handler(Socket socket)  {
        try {
            System.out.println(Thread.currentThread().getName() + ":");
            byte[] bytes = new byte[1024];
            //通过socket获取输入流
            InputStream inputStream = socket.getInputStream();
            while (true){
                int read = inputStream.read(bytes);
                if(read != -1){
                    System.out.println(new String(bytes,0,read));
                }else {
                    break;
                }
            }
    }catch (Exception e){
            e.printStackTrace();
        }finally {
            System.out.println("关闭和client的连接");
            try {
                socket.close();
            }catch (Exception e){
                e.printStackTrace();
            }

        }
    }
}
